package com.lykj.lib_base.net.http

import android.annotation.SuppressLint
import android.content.Intent
import com.lykj.lib_base.data.bean.response.BaseResponse
import io.reactivex.Observer
import io.reactivex.disposables.Disposable


/**
 * ================================================
 * 自定义订阅者.观察者
 * 泛型为服务器返回的数据封装后类的类型
 * ================================================
 *
 * @author gosha
 * @date 2022/9/2-15:17
 */
abstract class CustomObserver<T : BaseResponse> : Observer<T> {
    abstract fun SpecificHandle(bean: T)

    /**
     * 观察者普通事件的回调方法。调用简单回调下一步的方法
     *
     * @param baseBean
     */
    override fun onNext(t: T) {
//        LogUtils.d("onNext() :: " + t!!::class.simpleName)
        if (null != t) {
            val intent: Intent
            when (t.code) {
                "886" -> {
                    //清除已更改的用户信息
//                    BaseApplication.getInstance().clearUserInfo(false)
//                    intent = Intent(BaseApplication.getInstance(), LoginActivity::class.java)
//                    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
//                    BaseApplication.getInstance().startActivity(intent)
                }
                else -> SpecificHandle(t)
            }
        } else {
            SpecificHandle(t)
        }
    }

    /**
     * 观察者完成时的回调，调用简单回调完成时的方法
     */
    override fun onComplete() {
//        if (GameExtManager.getInstance().isDebug()) {
//            LogUtils.d("onCompleted()")
//        }
    }

    /**
     * 观察者错误时的回调方法，调用简单回调完成时的方法。因为不管错误还是成功，都代表当前事件已经执行完毕了
     *
     * @param e 错误类型
     */
    @SuppressLint("MissingPermission")
    override fun onError(e: Throwable) {
        //检测网络链接 网络链接不正常直接return
//        if (!NetworkUtils.isAvailableByPing()) {
//            GameExtManager.getInstance().getContext()?.let { ToastUtils.showShort(it, "网络异常") }
//            return
//        }

//        if (GameExtManager.getInstance().isDebug()) {
//            LogUtils.e("Exception :: " + e.message + ":: onError()")
//        }
//        var ex: ExceptionHandle.ResponeThrowable? = null
//        if (e is ExceptionHandle.ResponeThrowable) {
//            ex = e as ExceptionHandle.ResponeThrowable
//        } else {
//            ex = ExceptionHandle.ResponeThrowable(e, ExceptionHandle.ERROR.UNKNOWN)
//            ex.message = "未知错误"
//        }
//        LogUtils.e("错误: " + ex.message.toString() + " code : " + ex.code)
//        e.message?.let { GameExtManager.getInstance().getContext()?.let { it1 ->
//            ToastUtils.showShort(
//                it1, it)
//        } }
//        val exception: ApiException = e as ApiException
//        LogUtils.e(exception.getCode() + exception.getDispalyMessage())
    }

    /**
     * 向观察员提供取消（处置）的手段
     * 连接（通道）与Observable在两者中
     * 同步（来自[（Object）][.onNext]）和异步方式。
     *
     * @param d
     */
    override fun onSubscribe(d: Disposable) {}
}